{{- /*
Renders a version callout for when a feature was introduced in a component.

Accepts positional parameters.
Depends on site.Params.min_version_thresholds and i18n strings for component IDs

@param {string} component The ID of the component as defined in site config.
@param {string} version The version of the component in which the thing was introduced.
@param {string} [link] A relevant link to e.g. release note.

@returns {template.HTML}

@examples

  {{< introduced buildx 0.12.0 "../release-notes.md#0120" >}}

  {{< introduced desktop "4.28" "https://example.com/" >}}

*/ -}}

{{- $component := .Get 0 }}
{{- $v := .Get 1 }}
{{- $link := .Get 2 }}
{{- $pos := .Position }}
{{- with (index site.Params.min_version_thresholds $component) }}
  {{- /*
  Hacky semver comparison.
  
  - Split the input version and threshold version strings 
  - Range over the input version []string
  - Cast to ints and compare input with same index threshold []string
  - Set threshold false if input is lower than config, and break
  */ -}}
  {{ $vslice := strings.Split $v "." }}
  {{ $tslice := strings.Split . "." }}
  {{ $versionAboveThreshold := true }}
  {{ range $i, $e := $vslice }}
    {{ if compare.Lt (cast.ToInt $e) (cast.ToInt (index $tslice $i)) }}
      {{ $versionAboveThreshold = false }}
      {{ break }}
    {{ end }}
  {{ end }}
  {{- if $versionAboveThreshold }}
    <div class="text-gray-light dark:text-gray-dark flex items-center gap-2">
       <span class="icon-svg flex items-center">{{ partialCached "icon.html" "chevron_right" "chevron_right" }}</span>
       <span>Introduced in {{ T $component }} version
       {{- if $link }}
         {{ page.RenderString (fmt.Printf `[%s](%s)` $v $link) }}
       {{- else }}
         {{ $v }}
       {{- end }}
       </span>
    </div>
  {{- end }}
{{- else }}
  {{ errorf "[introduced] invalid component: %s %v" $component $pos }}
{{- end }}
